package br.com.cinesystem.persistence;

import br.com.cinesystem.entity.Endereco;
import br.com.cinesystem.entity.Funcionario;
import br.com.cinesystem.entity.Usuario;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

public class FuncionarioDao extends Dao {

    public FuncionarioDao() {
    }

    public void salvar(Funcionario f)throws Exception{
        abrirConexao();

        SimpleDateFormat formata = new SimpleDateFormat("yyyy/MM/dd");
        String data = formata.format(f.getDataAdmissao());
        
        stmt = con.prepareStatement("INSERT INTO funcionario VALUES (null,?,?,?,?,?)");
        stmt.setInt(1, f.getUsuario().getIdUsuario());
        stmt.setInt(2, f.getMatricula());
        stmt.setDouble(3, f.getSalario());
        stmt.setString(4, f.getTelefone());
        stmt.setString(5, data);

        stmt.execute();
        
        fecharConexao();
    }

    public Integer buscarMatricula()throws Exception{
        abrirConexao();

        stmt = con.prepareStatement("SELECT MAX(matricula) as maior FROM funcionario");
        rs = stmt.executeQuery();

        Integer matricula=null;
        if(rs.next()){
            matricula = rs.getInt("maior");
        }
        fecharConexao();
        return matricula;
    }
    public void alterar(Funcionario f)throws Exception{
        abrirConexao();

        SimpleDateFormat formata = new SimpleDateFormat("yyyy/MM/dd");
        String data = formata.format(f.getDataAdmissao());

        stmt = con.prepareStatement("UPDATE funcionario set salario=?,telefone=?,dataAdmissao=? WHERE idFuncionario=?");
        stmt.setDouble(1, f.getSalario());
        stmt.setString(2, f.getTelefone());
        stmt.setString(3, data);
        stmt.setInt(4, f.getIdFuncionario());

        stmt.execute();

        fecharConexao();
    }
    public Funcionario buscar(Funcionario f)throws Exception{

        abrirConexao();

        StringBuilder sb = new StringBuilder();
        sb.append("select u.idUsuario, u.id_Endereco, u.nome, u.sexo, u.dataNascimento, ");
        sb.append("u.cpf, u.rg, u.email, u.perfil, u.situacao, f.idFuncionario, f.dataAdmissao, ");
        sb.append("f.salario, f.telefone, f.matricula, ");
        sb.append("e.logradouro, e.numero, e.complemento, e.cep, e.bairro, e.cidade, e.estado ");
        sb.append("from usuario u inner join endereco e ");
        sb.append("on u.id_Endereco = e.idEndereco ");
        sb.append("inner join funcionario f on u.idUsuario = f.id_Usuario WHERE idFuncionario=?");

        stmt = con.prepareStatement(sb.toString());
        stmt.setInt(1, f.getIdFuncionario());

        rs = stmt.executeQuery();

        Funcionario funcionario = null;

        if(rs.next()){
            funcionario = new Funcionario();
            funcionario.setUsuario(new Usuario());
            funcionario.getUsuario().setEndereco(new Endereco());

            funcionario.setIdFuncionario(rs.getInt("idFuncionario"));
            funcionario.setSalario(rs.getDouble("salario"));
            funcionario.setTelefone(rs.getString("telefone"));
            funcionario.setDataAdmissao(rs.getDate("dataAdmissao"));
            funcionario.getUsuario().setIdUsuario(rs.getInt("idUsuario"));
            funcionario.getUsuario().setNome(rs.getString("nome"));
            funcionario.getUsuario().setSexo(rs.getString("sexo"));
            funcionario.getUsuario().setDataNascimento(rs.getDate("dataNascimento"));
            funcionario.getUsuario().setCpf(rs.getString("cpf"));
            funcionario.getUsuario().setRg(rs.getString("rg"));
            funcionario.getUsuario().setEmail(rs.getString("email"));
            funcionario.getUsuario().setPerfil(rs.getInt("perfil"));
            funcionario.getUsuario().setSituacao(rs.getInt("situacao"));
            funcionario.getUsuario().getEndereco().setIdEndereco(rs.getInt("id_Endereco"));
            funcionario.getUsuario().getEndereco().setLogradouro(rs.getString("logradouro"));
            funcionario.getUsuario().getEndereco().setNumero(rs.getString("numero"));
            funcionario.getUsuario().getEndereco().setComplemento(rs.getString("complemento"));
            funcionario.getUsuario().getEndereco().setCep(rs.getString("cep"));
            funcionario.getUsuario().getEndereco().setBairro(rs.getString("bairro"));
            funcionario.getUsuario().getEndereco().setCidade(rs.getString("cidade"));
            funcionario.getUsuario().getEndereco().setEstado(rs.getString("estado"));

        }
        fecharConexao();
        return funcionario;
    }
    public List<Funcionario> buscarTodos()throws Exception{

        abrirConexao();

        StringBuilder sb = new StringBuilder();
        sb.append("select u.idUsuario, u.id_Endereco, u.nome, u.sexo, u.dataNascimento, ");
        sb.append("u.cpf, u.rg, u.email, u.perfil, u.situacao, f.idFuncionario, f.dataAdmissao, ");
        sb.append("f.salario, f.telefone, f.matricula, ");
        sb.append("e.logradouro, e.numero, e.complemento, e.cep, e.bairro, e.cidade, e.estado ");
        sb.append("from usuario u inner join endereco e ");
        sb.append("on u.id_Endereco = e.idEndereco ");
        sb.append("inner join funcionario f on u.idUsuario = f.id_Usuario WHERE u.situacao=1");

        stmt = con.prepareStatement(sb.toString());
        
        rs = stmt.executeQuery();

        Funcionario funcionario = null;
        List<Funcionario> lista = new ArrayList<Funcionario>();

        while(rs.next()){
            funcionario = new Funcionario();
            funcionario.setUsuario(new Usuario());
            funcionario.getUsuario().setEndereco(new Endereco());

            funcionario.setIdFuncionario(rs.getInt("idFuncionario"));
            funcionario.setSalario(rs.getDouble("salario"));
            funcionario.setTelefone(rs.getString("telefone"));
            funcionario.setDataAdmissao(rs.getDate("dataAdmissao"));
            funcionario.getUsuario().setIdUsuario(rs.getInt("idUsuario"));
            funcionario.getUsuario().setNome(rs.getString("nome"));
            funcionario.getUsuario().setSexo(rs.getString("sexo"));
            funcionario.getUsuario().setDataNascimento(rs.getDate("dataNascimento"));
            funcionario.getUsuario().setCpf(rs.getString("cpf"));
            funcionario.getUsuario().setRg(rs.getString("rg"));
            funcionario.getUsuario().setEmail(rs.getString("email"));
            funcionario.getUsuario().setPerfil(rs.getInt("perfil"));
            funcionario.getUsuario().setSituacao(rs.getInt("situacao"));
            funcionario.getUsuario().getEndereco().setIdEndereco(rs.getInt("id_Endereco"));
            funcionario.getUsuario().getEndereco().setLogradouro(rs.getString("logradouro"));
            funcionario.getUsuario().getEndereco().setNumero(rs.getString("numero"));
            funcionario.getUsuario().getEndereco().setComplemento(rs.getString("complemento"));
            funcionario.getUsuario().getEndereco().setCep(rs.getString("cep"));
            funcionario.getUsuario().getEndereco().setBairro(rs.getString("bairro"));
            funcionario.getUsuario().getEndereco().setCidade(rs.getString("cidade"));
            funcionario.getUsuario().getEndereco().setEstado(rs.getString("estado"));

            lista.add(funcionario);
        }
        fecharConexao();
        return lista;
    }
}
